package org.aplombh.java.awcing.basic.greedy.sectionProblem;

import org.aplombh.java.utils.Pair;
import org.aplombh.java.utils.Pair_r;

import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.util.*;

/**
 * 给定 N 个闭区间 [ai,bi]，请你将这些区间分成若干组，使得每组内部的区间两两之间（包括端点）没有交集，并使得组数尽可能小。
 * <p>
 * 输出最小组数。
 * <p>
 * 输入格式
 * 第一行包含整数 N，表示区间数。
 * <p>
 * 接下来 N 行，每行包含两个整数 ai,bi，表示一个区间的两个端点。
 * <p>
 * 输出格式
 * 输出一个整数，表示最小组数。
 * <p>
 * 数据范围
 * 1≤N≤105,
 * −109≤ai≤bi≤109
 * 输入样例：
 * 3
 * -1 1
 * 2 4
 * 3 5
 * 输出样例：
 * 2
 */

public class IntervalGrouping_906 {
    public static void main(String[] args) throws IOException {
        BufferedReader reader = new BufferedReader(new InputStreamReader(System.in));
        int n = Integer.parseInt(reader.readLine());
        IntervalGrouping ig = new IntervalGrouping(n);
        for (int i = 0; i < n; i++) {
            String[] s = reader.readLine().split(" ");
            ig.range[i] = new Pair(Integer.parseInt(s[0]), Integer.parseInt(s[1]));
        }
        System.out.println(ig.solve());
    }
}

class IntervalGrouping {
    private static final int N = 100010;
    Pair[] range = new Pair[N];
    PriorityQueue<Integer> heap = new PriorityQueue<>();
    int n;

    public IntervalGrouping(int n) {
        this.n = n;
    }

    public int solve() {
        Arrays.sort(range, 0, n);
        // 将每组中最大的右端点入队
        for (int i = 0; i < n; i++) {
            // 如果优先队列中最小的右端点比当前节点的左端点小
            // 说明当前区间和所有区间都有交集，新开一个组，当前节点的右端点入队
            if (heap.isEmpty() || heap.peek() >= range[i].l) {
                heap.add(range[i].r);
            } else {
                // 如果不相交就可以组为同一个组
                // 两点为同一个组，可将上一个元素出队
                // 将该点右区间加入队列
                heap.remove();
                heap.add(range[i].r);
            }
        }
        return heap.size();
    }
}